#
# Copyright 2015 gRPC authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

HOST_SYSTEM = $(shell uname | cut -f 1 -d_)
SYSTEM ?= $(HOST_SYSTEM)
#CXX = g++
CPPFLAGS += -I/home/hcgy/extend_disk/grpc/install/grpc/include\
    -I/home/hcgy/extend_disk/grpc/install/protobuf_x64/include\
    -I/home/hcgy/Documents/esm6800h/board/inc\
	-I/home/hcgy/Documents/esm6800h/app\
	-I/home/hcgy/extend_disk/libjson/libjsoncpp_x64/include
CXXFLAGS += -std=c++11
ifeq ($(SYSTEM),Darwin)
LDFLAGS += -L/usr/local/lib `pkg-config --libs protobuf grpc++ grpc`\
           -pthread\
           -lgrpc++_reflection\
           -ldl
else
LDFLAGS += -L/home/hcgy/extend_disk/grpc/install/grpc/lib
LDFLAGS += -L/home/hcgy/extend_disk/grpc/install/grpc/lib/protobuf
LDFLAGS += -L/usr/local/lib\
	-pthread\
           -Wl,--no-as-needed -lgrpc++_reflection -Wl,--as-needed -lgrpcpp_channelz\
           -ldl -lgrpc++_unsecure -lgrpc++_core_stats -lgrpc++ -lgrpc++_error_details -lprotobuf -lgrpc -lprotoc -lz

LDFLAGS+= -L/home/hcgy/extend_disk/libjson/jsoncpp/build/debug/src/lib_json/ -ljsoncpp\
        -Wl,-rpath=/mnt/nandflash/apps/libs
endif
PROTOC = protoc
GRPC_CPP_PLUGIN = grpc_cpp_plugin
GRPC_CPP_PLUGIN_PATH ?= `which $(GRPC_CPP_PLUGIN)`

proto_objects=defs_self.pb.o defs_self.grpc.pb.o defs.pb.o defs.grpc.pb.o 

proto_objects+= WingDCS.pb.o WingDCS.grpc.pb.o WingCtrlSys.pb.o WingCtrlSys.grpc.pb.o
PROTOS_PATH = ../../protos
beta_purify_objects=gp_beta_purify_server.o motor_config.o common.o sock_msg.o
#action_msg.o 
#beta_purify_objects+= spit_param.o gp_beta_client.o heat_config.o
beta_purify_objects+= spit_param.o report_msg_proc.o heat_config.o parse_scheme.o

beta_client_objects=gp_beta_client.o report_msg_proc.o motor_config.o  common.o sock_msg.o heat_config.o spit_param.o

#report_msg_proc.o motor_config.o  common.o sock_msg.o heat_config.o spit_param.o

vpath %.proto $(PROTOS_PATH)

DEF_QPCR=1

serverOut=gp_beta_purify_server

clientOut=gp_beta_purify_client

ifeq ($(DEF_QPCR),1)
CPPFLAGS+= -D_QPCR
serverOut=gp_beta_qpcr_server
clientOut=gp_beta_qpcr_client
endif

all: system-check $(serverOut) $(clientOut)

#x86: system-check OpenLid_client_x86 OpenLid_server_x86
#	g++ $^ $()

$(serverOut): $(proto_objects) $(beta_purify_objects)
	$(CXX) $^ $(LDFLAGS) -o $@
#	cp -f gp_beta_purify_server /mnt/hgfs/tools/bin/
	scp $@ hcsci@10.3.1.176:/home/yuantao/files/gp_beta/$@
#	scp $@ root@10.3.0.205:/mnt/nandflash/grpc/$@	

$(clientOut):$(proto_objects) $(beta_client_objects)
	$(CXX) $^ $(LDFLAGS) -o $@
#	cp -f gp_beta_purify_server /mnt/hgfs/tools/bin/
	scp $@ hcsci@10.3.1.176:/home/yuantao/files/gp_beta/$@


.PRECIOUS: %.grpc.pb.cc
%.grpc.pb.cc: %.proto
	$(PROTOC) -I $(PROTOS_PATH) --grpc_out=. --plugin=protoc-gen-grpc=$(GRPC_CPP_PLUGIN_PATH) $<

.PRECIOUS: %.pb.cc
%.pb.cc: %.proto
	$(PROTOC) -I $(PROTOS_PATH) --cpp_out=. $<


clean:
	rm -f *.o *.pb.cc *.pb.h gp_beta_purify_server


# The following is to test your system and ensure a smoother experience.
# They are by no means necessary to actually compile a grpc-enabled software.

PROTOC_CMD = which $(PROTOC)
PROTOC_CHECK_CMD = $(PROTOC) --version | grep -q libprotoc.3
PLUGIN_CHECK_CMD = which $(GRPC_CPP_PLUGIN)
HAS_PROTOC = $(shell $(PROTOC_CMD) > /dev/null && echo true || echo false)
ifeq ($(HAS_PROTOC),true)
HAS_VALID_PROTOC = $(shell $(PROTOC_CHECK_CMD) 2> /dev/null && echo true || echo false)
endif
HAS_PLUGIN = $(shell $(PLUGIN_CHECK_CMD) > /dev/null && echo true || echo false)

SYSTEM_OK = false
ifeq ($(HAS_VALID_PROTOC),true)
ifeq ($(HAS_PLUGIN),true)
SYSTEM_OK = true
endif
endif

system-check:
ifneq ($(HAS_VALID_PROTOC),true)
	@echo " DEPENDENCY ERROR"
	@echo
	@echo "You don't have protoc 3.0.0 installed in your path."
	@echo "Please install Google protocol buffers 3.0.0 and its compiler."
	@echo "You can find it here:"
	@echo
	@echo "   https://github.com/google/protobuf/releases/tag/v3.0.0"
	@echo
	@echo "Here is what I get when trying to evaluate your version of protoc:"
	@echo
	-$(PROTOC) --version
	@echo
	@echo
endif
ifneq ($(HAS_PLUGIN),true)
	@echo " DEPENDENCY ERROR"
	@echo
	@echo "You don't have the grpc c++ protobuf plugin installed in your path."
	@echo "Please install grpc. You can find it here:"
	@echo
	@echo "   https://github.com/grpc/grpc"
	@echo
	@echo "Here is what I get when trying to detect if you have the plugin:"
	@echo
	-which $(GRPC_CPP_PLUGIN)
	@echo
	@echo
endif
ifneq ($(SYSTEM_OK),true)
	@false
endif
